/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Dao;
import Entidad.*;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *
 * @author ANDREZ
 */
public class MatriculaDao {
      private static MatriculaDao INSTANCE = new MatriculaDao();
    private MatriculaDao() {
    }
    public static MatriculaDao getInstance(){
    return INSTANCE;
    }
    
    public List<BaseBE> listaGenero()
    {
        List<BaseBE> lista = new ArrayList();
        String sql ="{call sp_listaTipos_Gino(?)}";
        Connection c = new bd().getConnectionSQL();
       CallableStatement cs;
        ResultSet rs;
        try {
            cs = c.prepareCall(sql);
            cs.setInt(1,4);
            rs = cs.executeQuery();
            while(rs.next())
            {
                BaseBE obj = new BaseBE();
                obj.setId(rs.getInt("IdEnum"));
                obj.setNombre(rs.getString("Descripcion"));
               lista.add(obj);
            }
        } catch (SQLException ex) {
            Logger.getLogger(MatriculaDao.class.getName()).log(Level.SEVERE, null, ex);
        }

        return  lista;

    }
    
    public List<BaseBE> listaTipoTelefono()
    {
        List<BaseBE> lista = new ArrayList();
        String sql ="{call sp_listaTipos_Gino(?)}";
        Connection c = new bd().getConnectionSQL();
       CallableStatement cs;
        ResultSet rs;
        try {
            cs = c.prepareCall(sql);
            cs.setInt(1,2);
            rs = cs.executeQuery();
            while(rs.next())
            {
                BaseBE obj = new BaseBE();
                obj.setId(rs.getInt("IdEnum"));
                obj.setNombre(rs.getString("Descripcion"));
               lista.add(obj);
            }
        } catch (SQLException ex) {
            Logger.getLogger(MatriculaDao.class.getName()).log(Level.SEVERE, null, ex);
        }

        return  lista;

    }
    
       public List<BaseBE> listaOperador()
    {
        List<BaseBE> lista = new ArrayList();
        String sql ="{call sp_listaTipos_Gino(?)}";
        Connection c = new bd().getConnectionSQL();
       CallableStatement cs;
        ResultSet rs;
        try {
            cs = c.prepareCall(sql);
            cs.setInt(1,5);
            rs = cs.executeQuery();
            while(rs.next())
            {
                BaseBE obj = new BaseBE();
                obj.setId(rs.getInt("IdEnum"));
                obj.setNombre(rs.getString("Descripcion"));
               lista.add(obj);
            }
        } catch (SQLException ex) {
            Logger.getLogger(MatriculaDao.class.getName()).log(Level.SEVERE, null, ex);
        }

        return  lista;

    }
       
          
   public List<MatriculaBE.CategoriaBE> ListaCategoria()
    {
        List<MatriculaBE.CategoriaBE> lista = new ArrayList();
        String sql ="{call sp_listaCategoria_Gino()}";
        Connection c = new bd().getConnectionSQL();
        CallableStatement cs;
        ResultSet rs;
        try {
            cs = c.prepareCall(sql);
         //   cs.setInt(1, idtipnota);
            rs = cs.executeQuery();
            while(rs.next())
            {
                MatriculaBE mt = new MatriculaBE();
                MatriculaBE.CategoriaBE obj = mt.new CategoriaBE();
                obj.setId(rs.getInt("IdCategoria"));
                obj.setNombre(rs.getString("Categoria"));
                lista.add(obj);
            }
        } catch (SQLException ex) {
            Logger.getLogger(NotaDao.class.getName()).log(Level.SEVERE, null, ex);
        }

        return  lista;
    }
  
      public List<BaseBE> listaGradoSeccion(int idGrado)
    {
        List<BaseBE> lista = new ArrayList();
        String sql ="{call sp_listaGradoSeccion_Gino(?)}";
        Connection c = new bd().getConnectionSQL();
       CallableStatement cs;
        ResultSet rs;
        try {
            cs = c.prepareCall(sql);
            cs.setInt(1, idGrado);
            rs = cs.executeQuery();
            while(rs.next())
            {
               
                 BaseBE obj = new BaseBE();
                obj.setId(rs.getInt("IdSeccion"));
                obj.setNombre(rs.getString("Seccion"));
               lista.add(obj);
            }
        } catch (SQLException ex) {
            Logger.getLogger(MatriculaDao.class.getName()).log(Level.SEVERE, null, ex);
        }

        return  lista;
    }
    
      public List<GradoBE> ListaGrado()
    {
        List<GradoBE> lista = new ArrayList();
        String sql ="{call sp_listaGrado_Gino()}";
        Connection c = new bd().getConnectionSQL();
        CallableStatement cs;
        ResultSet rs;
        try {
            cs = c.prepareCall(sql);
         //   cs.setInt(1, idtipnota);
            rs = cs.executeQuery();
            while(rs.next())
            {
                
                GradoBE grd = new GradoBE();
               // MatriculaBE.CategoriaBE obj = mt.new CategoriaBE();
                grd.setId(rs.getInt("IdGrado"));
                grd.setGrado(rs.getInt("Grado"));
                
                BaseBE nivel = new BaseBE();
                
                nivel.setId(rs.getInt("IdTipoNivel"));
                nivel.setNombre(rs.getString("Descripcion"));
                
                grd.setTiponivel(nivel);
                lista.add(grd);

            }
        } catch (SQLException ex) {
            Logger.getLogger(MatriculaDao.class.getName()).log(Level.SEVERE, null, ex);
        }

        return  lista;
    }
 
    
    public MatriculaBE listaAlumnoApoderado(String dni)
    {
         MatriculaBE mtc=new MatriculaBE();
        String sql ="{call sp_BuscarAlumnopordocumento_Gino(?)}";
        Connection c = new bd().getConnectionSQL();
        CallableStatement cs;
        ResultSet rs;
        try {
            cs = c.prepareCall(sql);
            cs.setString(1, dni);
            rs = cs.executeQuery();
            while(rs.next())
            {
                PersonaBE p= new PersonaBE();
                BaseBE b1=new BaseBE();
                BaseBE b2=new BaseBE();
                BaseBE b3=new BaseBE();
                BaseBE b4=new BaseBE();
            
                TelefonoBE t= new TelefonoBE();
                p.setId(rs.getInt("IdPersona"));
                p.setNrodocumento(rs.getString("NroDocumento"));
                p.setNombrepersona(rs.getString("Nombres"));
                p.setApellidos(rs.getString("Apellidos"));
                p.setFechanacimiento(rs.getDate("FechaNacimiento"));
                b1.setNombre(rs.getString("DireccionPersona"));
                p.setDireccion(b1);
                b2.setId(rs.getInt("IdGenero"));
                p.setGenero(b2);
                b3.setId(rs.getInt("TipoTelefonoPersona"));
                p.setTipo(b3);
                b4.setId(rs.getInt("OperadorPersona"));
                t.setOperador(b4);
                p.setTelefono(t);
                t.setNumero(rs.getString("NumeroTelefonoPersona"));
                p.setTelefono(t);
                mtc.setAlumno(p);
                
                //apoderado
                PersonaBE pe= new PersonaBE();
                BaseBE be1=new BaseBE();
                BaseBE be2=new BaseBE();
                BaseBE be3=new BaseBE();
                BaseBE be4=new BaseBE();
                TelefonoBE te= new TelefonoBE();
                
                
                pe.setNrodocumento(rs.getString("NroDocumentoApoderado"));
                pe.setNombrepersona(rs.getString("NombresApoderado"));
                pe.setApellidos(rs.getString("ApellidoApoderado"));
                pe.setFechanacimiento(rs.getDate("FechaNacimientoApoderado"));
                be1.setNombre(rs.getString("DireccionApoderado"));
                pe.setDireccion(be1);
                be2.setId(rs.getInt("IdGeneroApoderado"));
                pe.setGenero(be2);
                be3.setId(rs.getInt("TipoTelefonoApoderado"));
                pe.setTipo(be3);
                be4.setId(rs.getInt("OperadorApoderado"));
                te.setOperador(be4);
                pe.setTelefono(t);
                te.setNumero(rs.getString("NumeroTelefonoApoderado"));
                pe.setTelefono(t);
                mtc.setApoderado(pe);
            }
        } catch (SQLException ex) {
            Logger.getLogger(MatriculaDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        return mtc;
    }
    
   public Boolean  Grabar(MatriculaBE mtc)
    {
        Boolean exito= false;
        String sql ="{call sp_GrabarMatricula_Gino(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}";
        Connection c = new bd().getConnectionSQL();
       CallableStatement cs;
        try {
            cs = c.prepareCall(sql);
            cs.setInt(1,mtc.getId());
            cs.setInt(2,mtc.getAlumno().getId());
            cs.setString(3,mtc.getAlumno().getNrodocumento());
            cs.setString(4, mtc.getAlumno().getNombrepersona());
            cs.setString(5,mtc.getAlumno().getApellidos());
            cs.setString(6,mtc.getAlumno().getDireccion().getNombre());
            cs.setInt(7,mtc.getCategoria().getId());
            cs.setInt(8,mtc.getAlumno().getGenero().getId());
            cs.setInt(9,mtc.getAlumno().getTelefono().getTipo().getId());
            cs.setInt(10,mtc.getAlumno().getTelefono().getOperador().getId());
            cs.setString(11,mtc.getAlumno().getTelefono().getNumero());
            //apoderado
            cs.setString(12,mtc.getApoderado().getNrodocumento());
            cs.setString(13, mtc.getApoderado().getNombrepersona());
            cs.setString(14,mtc.getApoderado().getApellidos());
            cs.setString(15,mtc.getApoderado().getDireccion().getNombre());
            cs.setInt(16,mtc.getApoderado().getGenero().getId());
            cs.setInt(17,mtc.getApoderado().getTelefono().getTipo().getId());
            cs.setInt(18,mtc.getApoderado().getTelefono().getOperador().getId());
            cs.setString(19,mtc.getApoderado().getTelefono().getNumero());
            
            cs.setInt(20,mtc.getGrado().getId());
            cs.setInt(21, mtc.getSeccion().getId());
            cs.setInt(22,mtc.getAnoelectivo());
          //   cs.setDate(6,mtc.getAlumno().getFechanacimiento());
            
          //  cs.setDate(16,mtc.getApoderado().getFechanacimiento());
         //   cs.setDate(25, mtc.getFechamatricula());
            
            exito=true;
            
        } catch (SQLException ex) {
            Logger.getLogger(MatriculaDao.class.getName()).log(Level.SEVERE, null, ex);
        }
        
        return exito;
    }
   
   public List<MatriculaBE> BuscarMatricula(int añoLectivo)
   {
        List<MatriculaBE> lista = new ArrayList();
        String sql ="{call sp_listaMatricula_Gino(?)}";
        Connection c = new bd().getConnectionSQL();
       CallableStatement cs;
        ResultSet rs;
        try {
            cs = c.prepareCall(sql);
            cs.setInt(1, añoLectivo);
            rs = cs.executeQuery();
            while(rs.next())
            {
               
                 MatriculaBE obj = new MatriculaBE();
                 obj.setId(rs.getInt("IdMatricula"));
                 obj.setAnoelectivo(rs.getInt("AnoLectivo"));
                /* PersonaBE p= new PersonaBE();
                 p.setId(rs.getInt(""));
                 p.setNombre(rs.getString(""));
                 p.setApellidos(rs.getString(""));
                 obj.setAlumno(p);*/
                 lista.add(obj);
            }
        } catch (SQLException ex) {
            Logger.getLogger(MatriculaDao.class.getName()).log(Level.SEVERE, null, ex);
        }

        return lista;
    
   }
}
